class sceneManager {
	// 静态的属性
	static obj;
	// 静态的函数	
	static fun() {
		if (this.obj==null){
			// 第一次调用
			// 当前还没有该对象时,返回一个实例化的对象
			this.obj = new sceneManager()
		}
		// 第一次后的调用
		return this.obj;
	}

	// static 类上的静态属性或函数，可以通过调用类名访问的
	// public/private/protect  类的实例上的属性或函数，需要实例化后才可以访问

	// 场景管理类
	public constructor() {
		
	}
	// 父容器
	private father;
	// 场景类
	private view;
	// 资源组名
	private groupName;
	// 传递参数
	private prama;

	public loadingView;

	loading(father, view, groupName,prama) {
		this.father = father;
		this.view = view;
		this.groupName = groupName;
		this.prama = prama;

        //设置加载进度界面
        this.loadingView = new LoadingUI();
        this.father.addChild(this.loadingView);


		// 加载资源库
		RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
        RES.loadConfig("resource/default.res.json", "resource/");

	}
	onConfigComplete() {
		// 资源库加载成功
		// 移除资源库监听事件
		RES.removeEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);

        // 设置监听资源组加载情况
		RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
		// 进度事件
		RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this);

		// 加载资源组
		RES.loadGroup(this.groupName)
	}
	onResourceLoadComplete() {
		// 场景资源组加载成功

		// 移除加载页面
		this.father.removeChild(this.loadingView);

		// 移除监听资源组加载情况
		RES.removeEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
		RES.removeEventListener(RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this);

		this.addScene();
	}

    /**
     * preload资源组加载进度
     * loading process of preload resource
     */
    private onResourceProgress(event: RES.ResourceEvent): void {
        this.loadingView.setProgress(event.itemsLoaded, event.itemsTotal);
    }




	// 添加场景的函数
	private addScene() {
		
		// 父容器只能存在一个场景对象
		if (this.father.$children.length !=0) {
			this.father.removeChildAt(0);
			
		}
		// 
		let newView = new this.view(this.father,this.prama);
		
		//	添加到父容器
		this.father.addChild(newView);
	}


}